package judesart.app.client.project;

import java.util.List;

import judesart.app.domain.Note;
import judesart.app.domain.Project;
import judesart.app.shared.ArtworkShort;
import judesart.app.shared.SearchResult;
import com.google.gwt.user.client.rpc.AsyncCallback;

public interface ProjectControllerAsync
{
    void createProject(Project project, AsyncCallback<Project> callback);

    void updateProject(Project project, AsyncCallback<Project> callback);

    void deleteProject(Long projectId, AsyncCallback<Void> callback);

    void searchProjects(int startAt, int maxElements, AsyncCallback<SearchResult<Project>> callback);

    void getProject(Long id, AsyncCallback<Project> callback);

    void deleteSketchFromProject(Long projectId, Long imageId, AsyncCallback<Void> callback);

    void findSketchKeyByImageId(Long imageId, AsyncCallback<String> callback);

    void updateSketchDescription(String sketchKey, String description, AsyncCallback<String> callback);

    void deletePhotoFromProject(Long projectId, Long imageId, AsyncCallback<Void> callback);

    void findPhotoKeyByImageId(Long imageId, AsyncCallback<String> callback);

    void updatePhotoDescription(String photoKey, String description, AsyncCallback<String> callback);

    void addArtworkToProject(Long projectId, Long artworkId, AsyncCallback<Void> callback);

    void deleteArtworkFromProject(Long projectId, Long artworkId, AsyncCallback<Void> callback);

    void findProjectArtworksImages(Long projectId, AsyncCallback<List<ArtworkShort>> callback);

    void addNoteToProject(Long projectId, String text, AsyncCallback<Note> callback);

    void deleteNoteFromProject(Long projectId, String notekey, AsyncCallback<Void> callback);

    void updateNoteInProject(Note note, AsyncCallback<Void> callback);

    void findAllUserProjects(Long userId, AsyncCallback<List<Project>> callback);

}
